package org.java.admin.websocket;

import org.springframework.stereotype.Component;

import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;

/**
 * @program: lb-manage
 * @description
 * @author: LiuBao
 * @create: 2020-07-30 16:51
 **/
//@ServerEndpoint("/websocket/{sid}")
//@Component
//public class WebSocketServer {
//    // 记录当前的连接数
//    private static int onlineCount = 0;
//    // 线程安全的Set，用来存放WebSocket对象
//    private static CopyOnWriteArraySet<WebSocketServer> webSocketSet = new CopyOnWriteArraySet<WebSocketServer>();
//    //与某个客户端的连接会话, 需要通过它给客户端发送数据
//    private Session session;
//    //接收 sid
//    private String sid = "";
//
//    /**
//     * 连接建立成功调用的方法
//     * @param session
//     * @param sid
//     */
//    @OnOpen
//    public void onOpen(Session session, @PathParam("sid") String sid){
//        this.session = session;
//        webSocketSet.add(this); //加入Set
//        WebSocketServer.addOnlineCount();
//        System.out.println("有新窗口开始监听:"+sid+",当前在线人数为" + getOnlineCount());
//        this.sid = sid;
//        try {
//            sendMessage("连接成功");
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 连接关闭调用的方法
//     */
//    @OnClose
//    public void onClose() {
//        webSocketSet.remove(this);  // 丛Set中移除
//        subOnlineCount();
//        System.out.println("有一连接关闭！当前在线人数为" + getOnlineCount());
//
//    }
//
//    /**
//     * 收到客户端以后调用的方法
//     * @param message
//     * @param session
//     */
//    @OnMessage
//    public void onMessage(String message, Session session) {
//        System.out.println("收到来自窗口"+sid+"的信息:"+message);
//        // 群发消息
//        for (WebSocketServer item: webSocketSet) {
//            try {
//                item.sendMessage(message);
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//
//        }
//    }
//
//    /**
//     * 发生错误的时候打印的信息
//     * @param session
//     * @param error
//     */
//    @OnError
//    public void onError(Session session, Throwable error) {
//        System.out.println("发生错误");
//        error.printStackTrace();
//    }
//
//    /**
//     * 服务器主动推送
//     * @param message
//     * @throws IOException
//     */
//     public void sendMessage(String message) throws IOException {
//        this.session.getBasicRemote().sendText(message);
//     }
//
//    /**
//     * 群发自定义消息
//     * @param message
//     * @param sid
//     */
//     public static void sendInfo(String message, @PathParam("sid") String sid) {
//         System.out.println("推送消息到窗口"+sid+"，推送内容:"+message);
//         for (WebSocketServer item: webSocketSet) {
//             try {
//                 //这里可以设定只推送给这个sid的，为null则全部推送
//                 if (sid == null) {
//                     item.sendMessage(message);
//                 } else if (item.sid.equals(sid)) {
//                     item.sendMessage(message);
//                 }
//             } catch (IOException e) {
//                 e.printStackTrace();
//             }
//         }
//     }
//
//    /**
//     * 递加
//     */
//    public static synchronized void addOnlineCount() {
//        WebSocketServer.onlineCount++;
//    }
//
//    /**
//     * 递减
//     */
//    public static synchronized void subOnlineCount() {
//        WebSocketServer.onlineCount--;
//    }
//
//    /**
//     * 返回当前的数值
//     * @return
//     */
//    public static synchronized int getOnlineCount() {
//          return onlineCount;
//    }
//
//    /**
//     * 返回数据
//     * @return
//     */
//    public static CopyOnWriteArraySet<WebSocketServer> getWebSocketSet() {
//        return webSocketSet;
//    }
//}
